import { StrUtil } from '@xtail/core'
import { IconifyJSON } from '@iconify/types'
import { IconsType } from '../../../common'
import { genIconsBySetIcons } from './gen-icons-by-set-icons'
import { getSetIcons } from './get-set-icons'
import { genIconsByIconifyJSON } from './gen-icons-by-iconify-json'

/**
 * 加载 Iconify 图标集为 {@link IconsType} 类型的图标列表。
 *
 * @param {IconifyJSON | string} iconSet 需要进行加载的 Iconify 图标集：
 * - 如果传入的图标集的数据类型为 {@link IconifyJSON}，则直接根据传入的图标集 JSON 数据生成 {@link IconsType} 类型的图标列表（列表中的元
 * 素为 SIcon 组件的组件参数外加一个 iconName 属性）；
 * - 如果传入的图标集的数据类型为 {@link string}，即传入的是 Iconify 图标集名称，则根据传入的图标集名称发送网络请求，从 Iconify 图标库中获
 * 取图标集的图标列表数据，并根据获取的图标列表生成 {@link IconsType} 类型的图标列表（列表中的元素为 SIcon 组件的组件参数外加一个 iconName
 * 属性）。
 * @returns {Promise<IconsType | false>} {@link IconsType} 类型的图标列表或 false，false 表示加载失败。
 */
export const loadIcons = async (iconSet: IconifyJSON | string): Promise<IconsType | false> => {
  if (StrUtil.isStr(iconSet)) {
    try {
      return genIconsBySetIcons(await getSetIcons(iconSet))
    } catch (e) {
      return false
    }
  } else {
    return genIconsByIconifyJSON(iconSet)
  }
}

export type LoadIconsType = typeof loadIcons
